"Un computer per tutti"

Progetto Ateneo 3a Missione

Andrea Vitaletti (Sapienza)

Obiettivi¶

  • Donare PC
  • Analisi Data Driven del fenomeno del Digitla Divide
  • Workshop

Divario Digitale (Digital Divide)¶

Il divario digitale è il divario esistente tra chi ha accesso effettivo alle tecnologie dell'informazione (in particolare personal computer e Internet) e chi ne è escluso, in modo parziale o totale. I motivi di esclusione comprendono diverse variabili: condizioni economiche, livello d'istruzione, qualità delle infrastrutture, differenze di età o di sesso, appartenenza a diversi gruppi etnici, provenienza geografica[2]. Oltre a indicare il divario nell'accesso reale alle tecnologie, la definizione include anche disparità nell'acquisizione di risorse o capacità necessarie a partecipare alla società dell'informazione: nei paesi avanzati, e specie nella popolazione giovane, infatti, il divario di meno accesso alla rete è ormai quasi del tutto colmato e si apre invece un divario digitale di secondo livello basato sulle modalità di fruizione (Wikipedia)

Analisi Data Driven del fenomeno del Digitla Divide¶

  • Focus nella scuola
  • Approccio Iniziale: Questionario
  • Intuizione: Accedere ai log del Resgistro Elettronico

Il registro Elettronico¶

In collaborazione con Axios

Ipotesi¶

Se uno strumento digitale così importante viene usato poco ci può essere un problema di Digital Divide

Data as Excel files¶

Capire la struttura dei dati¶

  • EE = Elementari
  • MM = medie
  • SS = Superiori
  • ACso = il grado per esempio la prima media è MM 1, il quarto superiore è SS 4
  • Alu = Alunni
  • Tut = Tutori
  • Maschio
  • Femmina
  • Italiani
  • Stranieri
In [32]:
import pandas as pd
sheets = ['Dati_Sett 2022','Dati_Ott 2022','Dati_Nov 2022','Dati_Dic 2022','Dati_Gen 2023','Dati_Feb 2023','Dati_Mar 2023','Dati_Apr 2023','Dati_Mag 2023','Dati_Giu 2023']
dfs = []
for sheet in sheets:
    dfs.append(pd.read_excel('Sapienza2.xlsx', sheet_name=sheet))
    
df_months_logs = pd.concat(dfs, ignore_index=True)

Esportare i dati in formato non proprietario¶

In [36]:
df_months_logs.to_csv("months_log.csv",index=False)

Da 0 a 3 stelle!¶

Analisi dei dati¶

In [3]:
import pandas as pd
df_all_from_csv = pd.read_csv("months_log.csv")  

Dati sugli accessi¶

Quanti sono gli accessi mensili per tiplogia di utenti ?¶

In [8]:
months = [9,10,11,12,1,2,3,4,5,6]
accessi_totali_per_mese = []
accessi_totali_tutori_italiani_per_mese = []
accessi_totali_tutori_stranieri_per_mese = []
accessi_totali_alunni_italiani_per_mese = []
accessi_totali_alunni_stranieri_per_mese = []

for month in months:
    mask = (df_all_from_csv['DataLogin'].dt.month == month)
    accessi_totali_per_mese.append(df_all_from_csv.loc[mask]['Totale'].sum())
    accessi_totali_tutori_italiani_per_mese.append(df_all_from_csv.loc[mask]['TutITA'].sum())
    accessi_totali_tutori_stranieri_per_mese.append(df_all_from_csv.loc[mask]['TutSTRA'].sum())
    accessi_totali_alunni_italiani_per_mese.append(df_all_from_csv.loc[mask]['AluITA'].sum())
    accessi_totali_alunni_stranieri_per_mese.append(df_all_from_csv.loc[mask]['AluSTRA'].sum())

Accessi per regione¶

Gli uomini o le donne sono "genitori più partecipi"?¶

Gli uomini o le donne sono "studenti più partecipi"?¶

Dati sulle classi¶

In [19]:
df1 = pd.read_csv("class_data.csv")  
In [21]:
# classi gestite dal nostro registro (si fa riferimento solo alla versione 2.0 utilizzato da circa la metà delle nostre scuole (circa 1000)
print("Totale alunni:",df1["Alunni"].sum())
print("Totale classi:",df1["Classi"].sum())
Totale alunni: 49169
Totale classi: 2724

Indice di Partecipazione¶

In [63]:
df_accessi_per_regione_alu=df_all_from_csv.groupby(['Regione'])[["AluTot"]].sum()
In [64]:
df_accessi_per_regione_alu
Out[64]:
AluTot
Regione
ABRUZZO 1
BASILICATA 0
CALABRIA 66
CAMPANIA 1579
ESTERO 172
FRIULI VENEZIA GIULIA 42
LAZIO 1602
LIGURIA 3441
LOMBARDIA 9728
MARCHE 148
PIEMONTE 4
PUGLIA 245
SARDEGNA 6
SICILIA 471
TOSCANA 270
UMBRIA 50
VENETO 67
In [65]:
type(df2['Alunni'])
Out[65]:
pandas.core.series.Series
In [66]:
df22 = df2['Alunni'].to_frame()
In [68]:
df22
Out[68]:
Alunni
Regione
BASILICATA 447
CALABRIA 4380
CAMPANIA 3044
ESTERO 695
FRIULI VENEZIA GIULIA 1599
LAZIO 5552
LIGURIA 2378
LOMBARDIA 5468
MARCHE 4661
MOLISE 609
PIEMONTE 3042
PUGLIA 4880
SARDEGNA 1967
SICILIA 2991
TOSCANA 4530
UMBRIA 1356
VENETO 1570
In [69]:
df_div = df_accessi_per_regione_alu['AluTot'].div(df22['Alunni'])
In [70]:
type(df_div)
Out[70]:
pandas.core.series.Series
In [71]:
df_div = df_div.to_frame()
In [72]:
df_div=df_div.rename(columns={0: "Index"})
In [73]:
df_div
Out[73]:
Index
Regione
ABRUZZO NaN
BASILICATA 0.000000
CALABRIA 0.015068
CAMPANIA 0.518725
ESTERO 0.247482
FRIULI VENEZIA GIULIA 0.026266
LAZIO 0.288545
LIGURIA 1.447014
LOMBARDIA 1.779078
MARCHE 0.031753
MOLISE NaN
PIEMONTE 0.001315
PUGLIA 0.050205
SARDEGNA 0.003050
SICILIA 0.157472
TOSCANA 0.059603
UMBRIA 0.036873
VENETO 0.042675
In [75]:
import pandas as pd
pd.options.plotting.backend = "plotly"

# using Plotly Express directly
import plotly.express as px
fig2 = px.bar(df_div,title="Indice partecipazione = Accessi/Alunni")
fig2.show()

Altro¶

jupyter nbconvert notebook_name.ipynb --to slides --post serve

jupyter nbconvert analysis.ipynb --to slides --post serve --SlidesExporter.reveal_scroll=True

jupyter nbconvert analysis.ipynb --to slides --post serve --SlidesExporter.reveal_scroll=True --no-input

jupyter nbconvert analysis.ipynb --to slides --post serve --SlidesExporter.reveal_scroll=True --TagRemovePreprocessor.enabled=True --TagRemovePreprocessor.remove_input_tags hide-input

In [39]:
gk = df.groupby(['Ordine','ACso'])
In [40]:
gk.first()
Out[40]:
DataLogin Regione Totale Maschi Femmine AluTot AluMaschi AluFemmine AluITA AluSTRA TutTot TutMaschi TutFemmine TutITA TutSTRA
Ordine ACso
AA 1 2022-09-07 CAMPANIA 1 0 1 0 0 0 0 0 1 0 1 1 0
EE 1 2022-09-01 LAZIO 1 0 1 0 0 0 0 0 1 0 1 1 0
2 2022-09-04 LIGURIA 1 0 1 0 0 0 0 0 1 0 1 1 0
3 2022-09-03 TOSCANA 1 0 1 1 0 1 1 0 0 0 0 0 0
4 2022-09-01 LAZIO 1 0 1 0 0 0 0 0 1 0 1 1 0
5 2022-09-01 LAZIO 1 1 0 0 0 0 0 0 1 1 0 1 0
MM 1 2022-09-02 CAMPANIA 1 0 1 0 0 0 0 0 1 0 1 1 0
2 2022-09-01 LAZIO 2 0 2 0 0 0 0 0 2 0 2 2 0
3 2022-09-01 LAZIO 1 0 1 0 0 0 0 0 1 0 1 1 0
SS 1 2022-09-06 LOMBARDIA 1 1 0 0 0 0 0 0 1 1 0 1 0
2 2022-09-01 LOMBARDIA 3 1 2 1 0 1 1 0 2 1 1 2 0
3 2022-09-01 LOMBARDIA 1 1 0 1 1 0 1 0 0 0 0 0 0
4 2022-09-01 LOMBARDIA 7 1 6 5 1 4 4 1 2 0 2 2 0
5 2022-09-01 LOMBARDIA 11 7 4 7 4 3 7 0 4 3 1 4 0
In [7]:
import os
os.environ['APPDATA']= ""
In [43]:
import pandasgui
In [9]:
import matplotlib.pyplot as plt
import pandas as pd
from pandasgui import show
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
show(df)
PandasGUI INFO — pandasgui.gui — Opening PandasGUI
PandasGUI INFO — pandasgui.gui — Opening PandasGUI
Out[9]:
<pandasgui.gui.PandasGui at 0x76b7d012d6c0>